//UART.c
#include <regx52.h>

/**
  * @brief  串口初始化，4800bps@11.0592MHz
  * @param  无
  * @retval 无
  */
//void UART_Init()	//4800bps@11.0592MHz		
//{
//	PCON &= 0x7F;	//波特率不加倍
//	SCON = 0x50;	//串行控制寄存器,8位数据,可变波特率.允许发送和接收
//	TMOD &= 0x0F;	//配置定时器清零高位
//	TMOD |= 0x20;	//高位0010，设置为8位自动重装	
//	TL1 = 0xFA;			//设置定时初始值
//	TH1 = 0xFA;			//设置定时重载值
//	ET1 = 0;			//禁止定时器中断	
//	TR1 = 1;			//定时器1开始计时
//	//打开中断，无论是接受还是发送都会进入中断函数
//	EA=1;
//	ES=1;
//}

void UART_Init(void)	//4800bps@11.0592MHz
{	
	//1.串口工作模式1
	SM0 = 0;
	SM1 = 1;

	//2.设置波特率
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率

	//2.1 设置定时器模式1  16位不自动重载
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式

	//2.2 设置定时器初值和重载值
	TL1 = 0xFA;			//设置定时初始值
	TH1 = 0xFA;			//设置定时重载值

	//2.3 定时器1开始计时 不使用中断
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时

	//3.接收数据相关配置
	REN = 1;	//接收使能
	SM2 = 0;	//不校验停止位

	//4.串口中断配置
	ES  = 1;
	EA  = 1;

	RI = 0;				//清除RI接受标志位
	TI = 0;				//清除TI发送标志位
}



/**
  * @brief  串口像电脑发送一个字节的数据
  * @param  Byte要发送的一个字节的数据
  * @retval 无
  */
void UART_SendByte(unsigned char Byte){
	SBUF=Byte;		//将数据放入SBUF寄存器（发送）
	while(TI==0);	//TI等于1时接收成功
	TI=0;					//必须软件复位，以便再次发送
}


void UART_SendByte_str(unsigned char *dat){
	while(*dat != '\0'){
		SBUF=*dat;
		while(TI==0);
		TI=0;
		dat++;
	}
}


/**
  * @brief  串口中断函数模板
  * @param  无
  * @retval 无
  */
//void UART_Routine() interrupt 4
//{
//	if(RI==1){
//		P2=SBUF;
//		RI=0;
//	}if(RI==0){
//		P2=~P2;
//		Delayms(500);
//	}
//}